/**
 *	任务调度主文件
 *	开发者：雨中磐石
 *	地址：www.rockoa.com
 *	日期：2023-07-19
 */


package com.framework.ACore;



import com.framerock.baselib.Rock;
import com.framerock.db.DBConn;
import com.framerock.server.Request;
import com.rock.xinhujava.RainRock;

import java.lang.reflect.Constructor;

/**
 * 计划任务
 * */
public class Task {


    protected Request mRequest      = null;
    protected DBConn nDb;

    /**
     * 设置执行数据库
     * */
    public void setnDb(DBConn dbs) { this.nDb = dbs; }

    /**
     * 设置客户端对象，正常没用
     * */
    public void setRequest(Request req) { this.mRequest = req; }

    /**
     * 执行
     * @param act 执行方法
     * */
    public String startQuery(String act)
    {
        String str = "";
        if(act.equals("run")){
            str = this.run();
        }else{
            str = this.runQuery(act);
        }
        return str;
    }

    /**
     * 默认方法需重写run方法
     * */
    protected String run() { return "not dev run"; }

    /**
     * 可重写方法
     * @param act 方法名
     * */
    protected String runQuery(String act) { return "not dev("+act+")"; }


    /**
     * 方法执行
     * */
    public static Task taskObj(DBConn dbs, String mod)
    {
        Task obj = getTaskObj(mod, "framework");
        if(obj == null && !Rock.isEmpt(RainRock.MYFOLDER)) {
            obj = getTaskObj(mod, RainRock.MYFOLDER);
        }
        if(obj == null)obj = new Task();
        obj.setnDb(dbs);
        return obj;
    }

    /**
     * 获取对象
     * @param mod 对应文件
     * @param folder 目录
     * */
    private static Task getTaskObj(String mod, String folder)
    {
        String classna = "com."+folder+".Task.Task"+mod+"";
        try {
            Class<?> clazz = Class.forName(classna);
            Constructor<?> constructor = clazz.getDeclaredConstructor();
            Task obj = (Task)constructor.newInstance();
            return obj;
        } catch (Exception e) {
        }
        return null;
    }
}
